package cn.itcast.lucene;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;
import java.io.IOException;

public class LuceneCreate {
    @Test
    public void testCreate() throws IOException {
        //创建文档对象
        Document document = new Document();
        //给文档对象添加字段,参数Field是一个接口,要new实现类的对象(StringField,TextField)
        //StringField的实例化需要三个参数:1-字段名,2-字段值,3-是否保存到文档,Store.Yes存储,Store.No不存储
        //YES保存到硬盘,NO不保存,取决于是否在结果集中展示该字段
        //1.只创建索引,不分词:StringField,LongField,IntField...应用:id,price,date
        //2.既创建索引,也分词:TextField...
        //3.一定会被存储,但一定不创建索引:StoreField...有的结果集中以这个字段进行展示,但是不以这个字段进行搜索
        document.add(new StringField("id","1", Field.Store.YES));
        //TestField:创建索引并提供分词,StringField创建索引但不分词
        document.add(new TextField("title","传智播客碉堡了，学完了我要迎娶白富美", Field.Store.YES));


        //创建文档对象,指定索引库的存放位置;FSDirectory文件系统;RAMDirectory内存:内存空间有限,机器一旦down机,所有
        //索引库的文件都会消失,不安全
        Directory directory = FSDirectory.open(new File("E:\\tem\\indexDir"));
        //创建索引写入器的配置类
        IndexWriterConfig Config = new IndexWriterConfig(Version.LATEST, new StandardAnalyzer());
        //创建索引写入器
        IndexWriter indexWriter = new IndexWriter(directory, Config);
        //执行索引写入操作,执行增删改操作
        indexWriter.addDocument(document);
        //执行提交
        indexWriter.commit();
        //执行关闭
        indexWriter.close();
    }

    @Test
    public void testCreate1() throws IOException {
        //创建文档对象
        Document document = new Document();
        //给文档对象添加字段,参数Field是一个接口,要new实现类的对象(StringField,TextField)
        //StringField的实例化需要三个参数:1-字段名,2-字段值,3-是否保存到文档,Store.Yes存储,Store.No不存储
        //YES保存到硬盘,NO不保存,取决于是否在结果集中展示该字段
        //1.只创建索引,不分词:StringField,LongField,IntField...应用:id,price,date
        //2.既创建索引,也分词:TextField...
        //3.一定会被存储,但一定不创建索引:StoreField...有的结果集中以这个字段进行展示,但是不以这个字段进行搜索
        document.add(new StringField("id","1", Field.Store.YES));
        //TestField:创建索引并提供分词,StringField创建索引但不分词
        document.add(new TextField("title","传智播客碉堡了，学完了我要迎娶白富美,蓝瘦香菇", Field.Store.YES));


        //创建文档对象,指定索引库的存放位置;FSDirectory文件系统;RAMDirectory内存:内存空间有限,机器一旦down机,所有
        //索引库的文件都会消失,不安全
        Directory directory = FSDirectory.open(new File("E:\\tem\\indexDir"));
        //创建索引写入器的配置类
        IndexWriterConfig Config = new IndexWriterConfig(Version.LATEST, new IKAnalyzer());
        //创建索引写入器
        IndexWriter indexWriter = new IndexWriter(directory, Config);
        //执行索引写入操作,执行增删改操作
        indexWriter.addDocument(document);
        //执行提交
        indexWriter.commit();
        //执行关闭
        indexWriter.close();
    }
}
